前言
這篇文章會進行到更多的資料操作
將會處理 Indexing Values
在標籤值的處理很重要
因為標籤值最主要就是拿來判讀各個欄位的名稱
很多時候外部讀取進來的欄位名稱都會是使用縮寫或是代號
再進行資料的分析前必須要先把欄位的名稱改成後續方便使用的形式
這個也是相當關鍵的資料分析前置作業
處理 Indexing Values
index可以自動產生
例如創造一個series,pandas會自動加上從0開始的索引值
也可以自己指定
像是前面有練習過的用dictionary產生一個dataframe,或是利用csv檔去讀取資料然後指定參數
還有另外一個指定index的方法,是用set_index()
這會指定資料裡某一欄的資料變成index
covid_india = pd.read_csv("Latest Covid-19 India Status.csv", index_col=0)
covid_india.head()
現在若是想要將index設為Active Ratio (%),同時保留State/UTs的欄位資料
# 可以先將indexed data設為另外一組column
covid_india["State/UTs"] = covid_india.index
# 接著將index改成Active Ratio (%)
covid_india = covid_india.set_index("Active Ratio (%)")
covid_india.head()
可以看到State/UTs的欄位資料放到了最右邊,而index順利改成Active Ratio (%)
也可以使用.reset_index()
這會刪除掉原先設定好的index,並且將原本index的數值放到另外一列column
covid_india = covid_india.reset_index()
covid_india.head()
可以看到Active Ratio (%)往右邊移動,而index則是自動產生從零開始的default value
使用的是kaggle上美國的police shooting資料檔案
police_shooting = pd.read_csv("shootings.csv", index_col=0)
police_shooting.head()
當我們想要試著看manner_of_death類別裡有多少種時
會使用到.unique()
police_shooting["manner_of_death"].unique()
'''
array(['shot', 'shot and Tasered'], dtype=object)
'''
可以發現只有兩個值'shot' & 'shot and Tasered'
若是只想要找出shot的資料
police_shooting = police_shooting[police_shooting["manner_of_death"] == "shot"]
police_shooting.head()
當我們想要的欄位只有特定幾個,可以使用list來留存
columns_to_keep = ["name","date","manner_of_death","armed","age","gender","race","city","state"]
police_shooting = police_shooting[columns_to_keep]
police_shooting.head()
若是我們想要讓index變成state和city的結合,可以利用list設定index
police_shooting = police_shooting.set_index(["state",'city'])
police_shooting.head(10)
現在若是想要將name的first name和 last name拆成兩個column
可以使用.apply()
將arbitrary function放進去並且應用在Series or Dataframe裡面的rows或是columns
先建立一個function
再apply到police_shooting的資料裡
def splitname(row):
row["First"] = row["name"].split(" ")[0]
row["Last"] = row["name"].split(" ")[-1]
return row
police_shooting = police_shooting.apply(splitname, axis="columns")
police_shooting.head()
可以看到順利的新增了First&Last的兩個欄位